package com.bbs.controller;

import com.bbs.common.Constants;
import com.wf.captcha.GifCaptcha;
import com.wf.captcha.base.Captcha;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
* 验证码生成器
* */
@Controller
public class CaptchaController {

    @GetMapping("/common/captcha")
    public void defaultCaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //设置 HTTP 响应头的 "Cache-Control" 字段为 "no-store"。这告诉浏览器不要缓存此响应，每次都需要从服务器获取最新的内容
        httpServletResponse.setHeader("Cache-Control", "no-store");
        //设置 HTTP 响应头的 "Pragma" 字段为 "no-cache"。这是为了向后兼容性而设置的，它告诉浏览器不要缓存此响应
        httpServletResponse.setHeader("Pragma", "no-cache");
        //设置 HTTP 响应头的 "Expires" 字段为 0。这告诉浏览器此响应的过期时间是过去的时间，即已经过期，应立即重新获取最新内容
        httpServletResponse.setDateHeader("Expires", 0);
        //设置 HTTP 响应的内容类型为 "image/gif"。这告诉浏览器响应的内容是 GIF 图片类型
        httpServletResponse.setContentType("image/gif");

        /*
        * GifCaptcha:用于生成 GIF 格式的验证码
        * 三个参数分别为宽、高、位数
        * */
        GifCaptcha captcha = new GifCaptcha(75, 30,4);

        // 设置类型 数字和字母混合
        captcha.setCharType(Captcha.TYPE_DEFAULT);

        //设置字体
        captcha.setCharType(Captcha.FONT_9);

        // 验证码存入session
        httpServletRequest.getSession().setAttribute(Constants.VERIFY_CODE_KEY, captcha.text().toLowerCase());

        // 输出图片流
        captcha.out(httpServletResponse.getOutputStream());
    }


}
